﻿using System;

namespace OhioState.Graphics
{
    /// <summary>
    /// Represents a camera with common parameters.
    /// </summary>
    public interface ICamera : ITransform, IZoomLens
    {
        /// <summary>
        /// Get or set camera aspect ratio.
        /// </summary>
        float AspectRatio { get; set; }

        /// <summary>
        /// Get the modelview matrix.
        /// </summary>
        /// <returns>The modelview matrix.</returns>
        OhioState.Math.Matrix4 GetModelViewMatrix();

        /// <summary>
        /// Get the projection matrix.
        /// </summary>
        /// <returns>The projection matrix.</returns>
        OhioState.Math.Matrix4 GetProjectionMatrix();

        /// <summary>
        /// Set the modelview matrix.
        /// </summary>
        /// <param name="matrix">The modelview matrix.</param>
        void SetModelViewMatrix(OhioState.Math.Matrix4 matrix);

        /// <summary>
        /// Set projection matrix.
        /// </summary>
        /// <param name="matrix">The projection matrix.</param>
        void SetProjectionMatrix(OhioState.Math.Matrix4 matrix);
        /// <summary>
        /// Sets the Projection Matrix
        /// </summary>
        /// <param name="viewAngle">view angle</param>
        /// <param name="aspectRatio">aspect ratio</param>
        /// <param name="near">near plane</param>
        /// <param name="far">far plane</param>
        void SetProjection(float viewAngle, float aspectRatio, float near, float far);
        /// <summary>
        /// Sets the Projection Matrix
        /// </summary>
        /// <param name="left">left plane</param>
        /// <param name="right">right plane</param>
        /// <param name="bottom">bottom plane</param>
        /// <param name="top">top plane</param>
        /// <param name="near">near plane</param>
        /// <param name="far">far plane</param>
        void SetProjection(float left, float right, float bottom, float top, float near, float far);
    }
}
